Background: the experiment that generated the raw sequencing data I am using in this RNA-seq experiment was conducted by University of Zurich.
I accessed this publicly available data on Sequence Read Archive (SRA), under the SRA identifier “SRP212102” ( https://www.ncbi.nlm.nih.gov/sra?term=SRP212102 ).
 

The following table shows the metadata of the experiment, including the samples that expresses wild type TRIM28 genes.
3 samples were mock infected and 3 samples were infected with influenza A virus at multiplicity of infection (MOI) of 10 Plaque forming units (PFU) per cell. RNA was extracted at 6 hours post infection.  

run_name sample_name genotype/variation infection source_name treatment
SRR9602253 GSM3905824 CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 wt uninfected (mock) TRIM28 wt mock wt_mock
SRR9602254 GSM3905825 CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 wt uninfected (mock) TRIM28 wt mock wt_mock
SRR9602255 GSM3905826 CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 wt uninfected (mock) TRIM28 wt mock wt_mock
SRR9602256 GSM3905827 CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 wt Influenza A/WSN/33, MOI10 PFU/cell, 6hpi TRIM28 wt IAV infected wt_infected
SRR9602257 GSM3905828 CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 wt Influenza A/WSN/33, MOI10 PFU/cell, 6hpi TRIM28 wt IAV infected wt_infected
SRR9602258 GSM3905829 CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 wt Influenza A/WSN/33, MOI10 PFU/cell, 6hpi TRIM28 wt IAV infected wt_infected

The heatmap below shows the distances across the samples, indicating significant difference between the groups of mock infected and influenza infected samples. While there is great similarity between the untreated, mock infected samples, the influenza infected samples are not only distant from the mock samples but also from each other.

The principal component analysis of the samples supports the findings in the heatmap. The mock infected samples are similar to each other and significantly different from the influenza infected samples. The 72% of the variance of the dataset is explained by the first principal component, which is the presence of influenza A in the samples.

The summary below shows how DESeq filtered out genes while performing differential gene expression analysis comparing the mock infected and influenza infected samples.


out of 28469 with nonzero total read count
adjusted p-value < 0.1
LFC > 0 (up)       : 5219, 18%
LFC < 0 (down)     : 4185, 15%
outliers [1]       : 15, 0.053%
low counts [2]     : 8312, 29%
(mean count < 2)
[1] see 'cooksCutoff' argument of ?results
[2] see 'independentFiltering' argument of ?results

28469 genes were considered for differential expression as the rest of the genes have not been expressed. Outliers and genes with low counts (in this case mean count < 2) were filtered out. By default in this analysis a gene is considered to be differentially expressed if the adjusted p-value (for multiple testing correction) is less than 0.1. Based on that criteria there are 5219 upregulated and 4185 downregulated genes.

I further filtered this dataset by setting the treshold for adjusted p-value less than 0.01 and for the absolute value of log2 fold change greater than 2. Based on this approach there are 2194 differentially expressed genes in this dataset.

The interactive volcano plot below shows the magnitude of change in gene expression with its measure of significance. The red points are representing genes that are differentially expressed based on the tresholds described above. According to the plot the higher the log2 fold change the more significant the change is. While in the majority of the downregulated genes the absolute value of the log2 fold change is below 5, this value is 10 in the upregulated genes, showing significantly greater positive foldchanges after the influenza infection.

The heatmap below showsthe top 25 differentially expressed genes across the 6 samples. These genes are not expressed, or only with extremely low count in the mock infected samples while they are highly expressed in the influenza infected samples.

The gene counts were transformed by variance stabilizing transformation to obtain constant variance that is not dependent on the mean. The tables below shows the difference between the original and the transformed gene counts in the first five genes of the heatmap.

Original gene counts:

GSM3905824 GSM3905825 GSM3905826 GSM3905827 GSM3905828 GSM3905829
TSPOAP1 1 0 0 16 30 30
ENDOU 0 0 0 21 20 9
GYS2 0 0 0 0 45 0
BTN1A1 0 0 0 5 24 28
OTOR 0 0 0 19 98 31

Transformed gene counts:

GSM3905824 GSM3905825 GSM3905826 GSM3905827 GSM3905828 GSM3905829
TSPOAP1 3.795362 3.618101 3.618101 7.161759 5.679940 7.832773
ENDOU 3.618101 3.618101 3.618101 6.393970 6.520597 5.265706
GYS2 3.618101 3.618101 3.618101 3.618101 7.097421 3.618101
BTN1A1 3.618101 3.618101 3.618101 5.293014 6.236363 6.514976
OTOR 3.618101 3.618101 3.618101 6.569106 7.859810 6.640338

The following plot shows the top biological processes that are enriched in the differentially expressed genes.

The following table shows the list of over-representated KEGG pathways in the differentially expressed genes.

Description GeneRatio p.adjust
Cytokine-cytokine receptor interaction 46/596 0.0000000
Viral protein interaction with cytokine and cytokine receptor 23/596 0.0000000
IL-17 signaling pathway 22/596 0.0003400
NF-kappa B signaling pathway 21/596 0.0082176
Staphylococcus aureus infection 12/596 0.0165541
TNF signaling pathway 22/596 0.0180911
LS0tDQp0aXRsZTogPGNlbnRlcj4gPGgxPlJOQS1zZXEgYW5hbHlzaXMgb2Ygc2FtcGxlcyBleHByZXNzaW5nIHdpbGQgdHlwZSBUUklNMjggZ2VuZTwvaDE+IDwvY2VudGVyPg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KXCANClwgDQoNCg0KYGBge3IgbG9hZF9wYWNrYWdlcywgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoQmlvY01hbmFnZXIpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeSh0eGltcG9ydCkNCmxpYnJhcnkoREVTZXEyKQ0KbGlicmFyeShwaGVhdG1hcCkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoYmlvbWFSdCkNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShSQ29sb3JCcmV3ZXIpDQpsaWJyYXJ5KGNsdXN0ZXJQcm9maWxlcikNCmxpYnJhcnkob3JnLkhzLmVnLmRiKQ0KbGlicmFyeShwYXRodmlldykNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmBgYA0KDQoNCmBgYHtyIGxvYWRfZGF0YSwgaW5jbHVkZT1GQUxTRX0NCnNhbXBsZV90YWJsZSA8LSBhcy5kYXRhLmZyYW1lKHJlYWRfY3N2KCIuLi9TcmFSdW5UYWJsZS50eHQiKSkNCg0Kc2FtcGxlX3RhYmxlIDwtIHNlbGVjdChzYW1wbGVfdGFibGUsIFJ1biwgJ1NhbXBsZSBOYW1lJywgJ2dlbm90eXBlL3ZhcmlhdGlvbicsICBpbmZlY3Rpb24sIHNvdXJjZV9uYW1lKQ0KDQpzYW1wbGVfdGFibGUgPC0gcmVuYW1lKHNhbXBsZV90YWJsZSwgcnVuX25hbWU9UnVuLCBzYW1wbGVfbmFtZT0nU2FtcGxlIE5hbWUnKQ0KDQpzYW1wbGVfdGFibGUkdHJlYXRtZW50IDwtIGZhY3RvcihyZXAoYygid3RfbW9jayIsICJ3dF9pbmZlY3RlZCIsICI2S1JfbW9jayIsICI2S1JfaW5mZWN0ZWQiKSwgZWFjaCA9IDMpLCBsZXZlbHM9IGMoInd0X21vY2siLCAid3RfaW5mZWN0ZWQiLCAiNktSX21vY2siLCAiNktSX2luZmVjdGVkIikpDQoNCnNhbXBsZV9maWxlcz1saXN0LmZpbGVzKCJDOi9BbmNzaS9CaW9pbmZvcm1hdGljcyBTdXBwb3J0IFVuaXQvcHJvamVjdF92aXJ1c18yMDIwL3NhbG1vbl9vdXRwdXQiLCBmdWxsLm5hbWVzID0gVFJVRSwgcmVjdXJzaXZlID0gVFJVRSwgcGF0dGVybiA9ICJxdWFudC5zZiIpDQoNCm5hbWVzKHNhbXBsZV9maWxlcykgPSBwdWxsKHNhbXBsZV90YWJsZSwgc2FtcGxlX25hbWUpDQoNCmdlbmVfbWFwIDwtIHJlYWRfY3N2KCIuLi9wcm9qZWN0XzIwMjBfZ2VuZV9tYXAuY3N2IiwgY29sX25hbWVzID0gYygiZW5zdF9pZCIsICJlbnNnX2lkIikpDQoNCmBgYA0KDQoNCg0KYGBge3Igd3RfZGF0YV9hbmFseXNpcywgaW5jbHVkZT1GQUxTRX0NCg0Kc2FtcGxlX3RhYmxlX3d0ID0gc2FtcGxlX3RhYmxlWzE6NiwgXQ0KDQpzYW1wbGVfZmlsZXNfd3QgPSBzYW1wbGVfZmlsZXNbMTo2XQ0KDQp0eGlfd3QgPSB0eGltcG9ydChmaWxlcyA9IHNhbXBsZV9maWxlc193dCwNCiAgICAgICAgICAgICAgICAgIHR5cGUgPSAic2FsbW9uIiwNCiAgICAgICAgICAgICAgICAgIHR4MmdlbmUgPSBnZW5lX21hcCwNCiAgICAgICAgICAgICAgICAgIGlnbm9yZVR4VmVyc2lvbiA9IFRSVUUpDQoNCmRkc193dCA9IERFU2VxRGF0YVNldEZyb21UeGltcG9ydCh0eGkgPSB0eGlfd3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sRGF0YSA9IHNhbXBsZV90YWJsZV93dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpZ24gPSB+IHRyZWF0bWVudCkNCg0KZGRzX3d0ID0gREVTZXEoZGRzX3d0KQ0KDQp2c3Rfd3QgPSB2YXJpYW5jZVN0YWJpbGl6aW5nVHJhbnNmb3JtYXRpb24oZGRzX3d0KQ0KDQpkaXN0X3d0ID0gYXMubWF0cml4KGRpc3QodChhc3NheSh2c3Rfd3QpKSkpDQoNCmBgYA0KDQoNCkJhY2tncm91bmQ6IHRoZSBleHBlcmltZW50IHRoYXQgZ2VuZXJhdGVkIHRoZSByYXcgc2VxdWVuY2luZyBkYXRhIEkgYW0gdXNpbmcgaW4gdGhpcyBSTkEtc2VxIGV4cGVyaW1lbnQgd2FzIGNvbmR1Y3RlZCBieSBVbml2ZXJzaXR5IG9mIFp1cmljaC5cDQpJIGFjY2Vzc2VkIHRoaXMgcHVibGljbHkgYXZhaWxhYmxlIGRhdGEgb24gU2VxdWVuY2UgUmVhZCBBcmNoaXZlIChTUkEpLCB1bmRlciB0aGUgU1JBIGlkZW50aWZpZXIgIlNSUDIxMjEwMiIgKCA8aHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9zcmE/dGVybT1TUlAyMTIxMDI+ICkuXA0KXCANCg0KVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUgbWV0YWRhdGEgb2YgdGhlIGV4cGVyaW1lbnQsIGluY2x1ZGluZyB0aGUgc2FtcGxlcyB0aGF0IGV4cHJlc3NlcyB3aWxkIHR5cGUgVFJJTTI4IGdlbmVzLlwNCjMgc2FtcGxlcyB3ZXJlIG1vY2sgaW5mZWN0ZWQgYW5kIDMgc2FtcGxlcyB3ZXJlIGluZmVjdGVkIHdpdGggKippbmZsdWVuemEgQSB2aXJ1cyoqIGF0IG11bHRpcGxpY2l0eSBvZiBpbmZlY3Rpb24gKE1PSSkgb2YgMTAgUGxhcXVlIGZvcm1pbmcgdW5pdHMgKFBGVSkgcGVyIGNlbGwuIFJOQSB3YXMgZXh0cmFjdGVkIGF0IDYgaG91cnMgcG9zdCBpbmZlY3Rpb24uDQpcIA0KDQoNCmBgYHtyIHd0X21ldGEsIGVjaG89RkFMU0V9DQoNCmthYmxlKHNhbXBsZV90YWJsZV93dCkgJT4lIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJib3JkZXJlZCIsICJob3ZlciIpLCBmdWxsX3dpZHRoID0gRiwgcG9zaXRpb24gPSAibGVmdCIpDQoNCmBgYA0KDQoNClRoZSBoZWF0bWFwIGJlbG93IHNob3dzIHRoZSBkaXN0YW5jZXMgYWNyb3NzIHRoZSBzYW1wbGVzLCBpbmRpY2F0aW5nIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZ3JvdXBzIG9mIG1vY2sgaW5mZWN0ZWQgYW5kIGluZmx1ZW56YSBpbmZlY3RlZCBzYW1wbGVzLiBXaGlsZSB0aGVyZSBpcyBncmVhdCBzaW1pbGFyaXR5IGJldHdlZW4gdGhlIHVudHJlYXRlZCwgbW9jayBpbmZlY3RlZCBzYW1wbGVzLCB0aGUgaW5mbHVlbnphIGluZmVjdGVkIHNhbXBsZXMgYXJlIG5vdCBvbmx5IGRpc3RhbnQgZnJvbSB0aGUgbW9jayBzYW1wbGVzIGJ1dCBhbHNvIGZyb20gZWFjaCBvdGhlci4NCg0KYGBge3Igd3Rfc2FtcGxlX2Rpc3QsIGVjaG89RkFMU0V9DQoNCnBoZWF0bWFwKGRpc3Rfd3QpDQoNCmBgYA0KDQoNClRoZSBwcmluY2lwYWwgY29tcG9uZW50IGFuYWx5c2lzIG9mIHRoZSBzYW1wbGVzIHN1cHBvcnRzIHRoZSBmaW5kaW5ncyBpbiB0aGUgaGVhdG1hcC4gVGhlIG1vY2sgaW5mZWN0ZWQgc2FtcGxlcyBhcmUgc2ltaWxhciB0byBlYWNoIG90aGVyIGFuZCBzaWduaWZpY2FudGx5IGRpZmZlcmVudCBmcm9tIHRoZSBpbmZsdWVuemEgaW5mZWN0ZWQgc2FtcGxlcy4NClRoZSA3MiUgb2YgdGhlIHZhcmlhbmNlIG9mIHRoZSBkYXRhc2V0IGlzIGV4cGxhaW5lZCBieSB0aGUgZmlyc3QgcHJpbmNpcGFsIGNvbXBvbmVudCwgd2hpY2ggaXMgdGhlIHByZXNlbmNlIG9mIGluZmx1ZW56YSBBIGluIHRoZSBzYW1wbGVzLg0KDQpgYGB7ciB3dF9wbG90cGNhLCBlY2hvPUZBTFNFfQ0KcGxvdFBDQSh2c3Rfd3QsIGludGdyb3VwID0gInRyZWF0bWVudCIpDQpgYGANCg0KDQpgYGB7ciB3dF9yZXN1bHQsIGluY2x1ZGU9RkFMU0V9DQoNCnJlc3VsdF9kZHNfd3QgPSByZXN1bHRzKGRkc193dCwgY29udHJhc3QgPSBjKCJ0cmVhdG1lbnQiLCAid3RfaW5mZWN0ZWQiLCJ3dF9tb2NrIikpDQoNCmBgYA0KDQoNClRoZSBzdW1tYXJ5IGJlbG93IHNob3dzIGhvdyBERVNlcSBmaWx0ZXJlZCBvdXQgZ2VuZXMgd2hpbGUgcGVyZm9ybWluZyBkaWZmZXJlbnRpYWwgZ2VuZSBleHByZXNzaW9uIGFuYWx5c2lzIGNvbXBhcmluZyB0aGUgbW9jayBpbmZlY3RlZCBhbmQgaW5mbHVlbnphIGluZmVjdGVkIHNhbXBsZXMuDQoNCmBgYHtyIHd0X3Jlc3VsdF9zdW1tYXJ5LCBlY2hvPUZBTFNFfQ0Kc3VtbWFyeShyZXN1bHRfZGRzX3d0KQ0KYGBgDQoNCjI4NDY5IGdlbmVzIHdlcmUgY29uc2lkZXJlZCBmb3IgZGlmZmVyZW50aWFsIGV4cHJlc3Npb24gYXMgdGhlIHJlc3Qgb2YgdGhlIGdlbmVzIGhhdmUgbm90IGJlZW4gZXhwcmVzc2VkLg0KT3V0bGllcnMgYW5kIGdlbmVzIHdpdGggbG93IGNvdW50cyAoaW4gdGhpcyBjYXNlIG1lYW4gY291bnQgPCAyKSB3ZXJlIGZpbHRlcmVkIG91dC4NCkJ5IGRlZmF1bHQgaW4gdGhpcyBhbmFseXNpcyBhIGdlbmUgaXMgY29uc2lkZXJlZCB0byBiZSBkaWZmZXJlbnRpYWxseSBleHByZXNzZWQgaWYgdGhlIGFkanVzdGVkIHAtdmFsdWUgKGZvciBtdWx0aXBsZSB0ZXN0aW5nIGNvcnJlY3Rpb24pIGlzIGxlc3MgdGhhbiAwLjEuDQpCYXNlZCBvbiB0aGF0IGNyaXRlcmlhIHRoZXJlIGFyZSA1MjE5IHVwcmVndWxhdGVkIGFuZCA0MTg1IGRvd25yZWd1bGF0ZWQgZ2VuZXMuDQoNCkkgZnVydGhlciBmaWx0ZXJlZCB0aGlzIGRhdGFzZXQgYnkgc2V0dGluZyB0aGUgdHJlc2hvbGQgZm9yIGFkanVzdGVkIHAtdmFsdWUgbGVzcyB0aGFuIDAuMDEgYW5kIGZvciB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgbG9nMiBmb2xkIGNoYW5nZSBncmVhdGVyIHRoYW4gMi4NCkJhc2VkIG9uIHRoaXMgYXBwcm9hY2ggdGhlcmUgYXJlIDIxOTQgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzIGluIHRoaXMgZGF0YXNldC4NCg0KDQoNCg0KDQpgYGB7ciB3dF9hbm5vdGF0aW9uLCBpbmNsdWRlPUZBTFNFfQ0KcmVzdWx0X2Rkc193dF9kZiA9IGFzLmRhdGEuZnJhbWUocmVzdWx0X2Rkc193dCkNCg0KZGRzX3d0X2ZpbHRlcjEgPSByZXN1bHRfZGRzX3d0X2RmWyBjb21wbGV0ZS5jYXNlcyhyZXN1bHRfZGRzX3d0X2RmKSwgXQ0KDQoNCmRkc193dF9maWx0ZXIxID0gcm93bmFtZXNfdG9fY29sdW1uKGRkc193dF9maWx0ZXIxLCB2YXIgPSAnZW5zZ19pZCcpDQoNCg0KZW5zZW1ibDEwMCA9IHVzZUVuc2VtYmwoYmlvbWFydCA9ICdlbnNlbWJsJywgZGF0YXNldCA9ICdoc2FwaWVuc19nZW5lX2Vuc2VtYmwnKQ0KDQphbm5vdGF0aW9uX3d0ID0gZ2V0Qk0oYXR0cmlidXRlcyA9IGMoJ2Vuc2VtYmxfZ2VuZV9pZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VudHJlemdlbmVfaWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRlcm5hbF9nZW5lX25hbWUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjaHJvbW9zb21lX25hbWUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjcmlwdGlvbicpLA0KICAgICAgICAgICAgICAgICAgZmlsdGVycyA9ICdlbnNlbWJsX2dlbmVfaWQnLA0KICAgICAgICAgICAgICAgICAgdmFsdWVzID0gZGRzX3d0X2ZpbHRlcjEkZW5zZ19pZCwNCiAgICAgICAgICAgICAgICAgIG1hcnQgPSBlbnNlbWJsMTAwKQ0KDQphbm5vdGF0ZWRfZGRzX3d0X2ZpbHRlcjEgPSBsZWZ0X2pvaW4oZGRzX3d0X2ZpbHRlcjEsIGFubm90YXRpb25fd3QsIGJ5ID0gYygnZW5zZ19pZCcgPSAnZW5zZW1ibF9nZW5lX2lkJykgKQ0KYGBgDQoNCg0KDQoNCg0KDQpgYGB7ciB3dF92b2xjYW5vX3NjcmlwdCwgaW5jbHVkZT0gRkFMU0V9DQoNCiMgYWRkaW5nIGEgbmV3IGNvbHVtbiB3aXRoIGxvZ2ljYWwgdmFsdWVzIGRlY2lkaW5nIHdoZXRoZXIgYSBnZW5lIGlzIGRpZmZlcmVudGlhbGx5IGV4cHJlc3NlZCBvciBub3QNCmFubm90YXRlZF9kZHNfd3RfZmlsdGVyMSRkaWZmX2dlbmVzID0gYW5ub3RhdGVkX2Rkc193dF9maWx0ZXIxJHBhZGogPCAwLjAxICYgYWJzKGFubm90YXRlZF9kZHNfd3RfZmlsdGVyMSRsb2cyRm9sZENoYW5nZSkgPiAyDQoNCmFubm90YXRlZF9kZHNfd3RfZmlsdGVyMSRzaGFwZSA9IGlmZWxzZSgoLWxvZzEwKGFubm90YXRlZF9kZHNfd3RfZmlsdGVyMSRwYWRqKT41MCksICJ0cmlhbmdsZSIsICJjaXJjbGUiKQ0KYW5ub3RhdGVkX2Rkc193dF9maWx0ZXIxJGxpbWl0ZWRfcGFkaiA9IC1sb2cxMChhbm5vdGF0ZWRfZGRzX3d0X2ZpbHRlcjEkcGFkaikNCmFubm90YXRlZF9kZHNfd3RfZmlsdGVyMSRsaW1pdGVkX3BhZGpbYW5ub3RhdGVkX2Rkc193dF9maWx0ZXIxJGxpbWl0ZWRfcGFkaj41MF0gPSA1MA0KDQojIHRoZXJlIGFyZSAxNyBnZW5lcyB3aXRoIC1sb2cxMCBwYWRqIDUwIG9yIGFib3ZlIDUwDQoNCg0Kdm9sY2Fub19wbG90X3d0ID0gZ2dwbG90KGFubm90YXRlZF9kZHNfd3RfZmlsdGVyMSwgYWVzKHggPSBsb2cyRm9sZENoYW5nZSwgeSA9IGxpbWl0ZWRfcGFkaiwgY29sb3VyID0gZGlmZl9nZW5lcywgc2hhcGUgPSBzaGFwZSwgbmFtZSA9IGV4dGVybmFsX2dlbmVfbmFtZSkpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImJsYWNrIiwgInJlZCIpKSArDQogIGdlb21fcG9pbnQoc2l6ZSA9IDEuNSwgYWxwaGEgPSAwLjIpICsNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMiwgY29sb3VyID0gJ2dyZXknLCBsaW5ldHlwZSA9IDIpICsNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gLTIsIGNvbG91ciA9ICdncmV5JywgbGluZXR5cGUgPSAyKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC1sb2cxMCgwLjAxKSwgY29sb3VyID0gJ2dyZXknLCBsaW5ldHlwZSA9IDIpICsNCiAgeGxpbSgtMTAsIDEwKSArDQogIHlsaW0oMCwgNTApICsNCiAgdGhlbWVfYncoKSArDQogIGxhYnModGl0bGUgPSAiVm9sY2FubyBwbG90IG9mIHdpbGQgdHlwZSBUUklNMjggc2FtcGxlcyIsDQogICAgICAgeCA9ICJMb2cyRm9sZENoYW5nZSBvZiBnZW5lIGV4cHJlc3Npb24iLA0KICAgICAgIHkgPSAiLWxvZzEwIG9mIHRoZSBhZGp1c3RlZCBwLXZhbHVlIikgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnbm9uZScsDQogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZT0iYm9sZCIsIHNpemU9MTIpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41ICxmYWNlPSJib2xkIiwgc2l6ZT0xNCksIA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBzaXplPTEyKSkNCg0KYGBgDQoNCg0KVGhlIGludGVyYWN0aXZlIHZvbGNhbm8gcGxvdCBiZWxvdyBzaG93cyB0aGUgbWFnbml0dWRlIG9mIGNoYW5nZSBpbiBnZW5lIGV4cHJlc3Npb24gd2l0aCBpdHMgbWVhc3VyZSBvZiBzaWduaWZpY2FuY2UuIFRoZSByZWQgcG9pbnRzIGFyZSByZXByZXNlbnRpbmcgZ2VuZXMgdGhhdCBhcmUgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGJhc2VkIG9uIHRoZSB0cmVzaG9sZHMgZGVzY3JpYmVkIGFib3ZlLg0KQWNjb3JkaW5nIHRvIHRoZSBwbG90IHRoZSBoaWdoZXIgdGhlIGxvZzIgZm9sZCBjaGFuZ2UgdGhlIG1vcmUgc2lnbmlmaWNhbnQgdGhlIGNoYW5nZSBpcy4NCldoaWxlIGluIHRoZSBtYWpvcml0eSBvZiB0aGUgZG93bnJlZ3VsYXRlZCBnZW5lcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGxvZzIgZm9sZCBjaGFuZ2UgaXMgYmVsb3cgNSwgdGhpcyB2YWx1ZSBpcyAxMCBpbiB0aGUgdXByZWd1bGF0ZWQgZ2VuZXMsIHNob3dpbmcgc2lnbmlmaWNhbnRseSBncmVhdGVyIHBvc2l0aXZlIGZvbGRjaGFuZ2VzIGFmdGVyIHRoZSBpbmZsdWVuemEgaW5mZWN0aW9uLg0KDQpgYGB7ciB3dF92b2xjYW5vX3Bsb3QsIGVjaG89RkFMU0V9DQpnZ3Bsb3RseSh2b2xjYW5vX3Bsb3Rfd3QpDQpgYGANCg0KDQpgYGB7ciB3dF9maWx0ZXJpbmcsIGluY2x1ZGU9RkFMU0V9DQpkZHNfd3RfZmlsdGVyMiA9IGRkc193dF9maWx0ZXIxW2Rkc193dF9maWx0ZXIxJHBhZGogPCAwLjAxLCBdDQoNCmRkc193dF9maWx0ZXIzID0gZGRzX3d0X2ZpbHRlcjJbIGFicyhkZHNfd3RfZmlsdGVyMiRsb2cyRm9sZENoYW5nZSkgPiAyLCBdDQoNCiNkZHNfd3RfZmlsdGVyMyA9IHJvd25hbWVzX3RvX2NvbHVtbihkZHNfd3RfZmlsdGVyMywgdmFyID0gImVuc2dfaWQiKQ0KDQphbm5vdGF0ZWRfZGRzX3d0X2ZpbHRlcjMgPSBsZWZ0X2pvaW4oZGRzX3d0X2ZpbHRlcjMsIGFubm90YXRpb25fd3QsIGJ5ID0gYygiZW5zZ19pZCIgPSAiZW5zZW1ibF9nZW5lX2lkIikpDQpgYGANCg0KDQoNCg0KYGBge3Igd3RfdG9wXzI1X2dlbmVzLCBpbmNsdWRlPUZBTFNFfQ0KdG9wXzI1X3d0ID0gYXJyYW5nZShhbm5vdGF0ZWRfZGRzX3d0X2ZpbHRlcjMsIGRlc2MoYWJzKGxvZzJGb2xkQ2hhbmdlKSkpWzE6MjUsIF0NCg0KZ2VuZXNfMjVfd3QgPSB0b3BfMjVfd3QkZW5zZ19pZA0KDQpuYW1lcyhnZW5lc18yNV93dCkgPSB0b3BfMjVfd3QkZXh0ZXJuYWxfZ2VuZV9uYW1lDQoNCg0KdG9wXzI1X3ZzdF93dCA9IGFzc2F5KHZzdF93dClbZ2VuZXNfMjVfd3QsIF0NCg0Kcm93bmFtZXModG9wXzI1X3ZzdF93dCkgPSBuYW1lcyhnZW5lc18yNV93dCkNCg0KDQpgYGANCg0KDQpUaGUgaGVhdG1hcCBiZWxvdyBzaG93c3RoZSB0b3AgMjUgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzIGFjcm9zcyB0aGUgNiBzYW1wbGVzLiBUaGVzZSBnZW5lcyBhcmUgbm90IGV4cHJlc3NlZCwgb3Igb25seSB3aXRoIGV4dHJlbWVseSBsb3cgY291bnQgaW4gdGhlIG1vY2sgaW5mZWN0ZWQgc2FtcGxlcyB3aGlsZSB0aGV5IGFyZSBoaWdobHkgZXhwcmVzc2VkIGluIHRoZSBpbmZsdWVuemEgaW5mZWN0ZWQgc2FtcGxlcy4NCg0KDQoNCmBgYHtyIHd0X2NvbG91cnMsIGluY2x1ZGU9RkFMU0V9DQpjb2xvcnMgPSBjb2xvclJhbXBQYWxldHRlKGJyZXdlci5wYWwoNywgIkJsdWVzIikpKDEwMCkNCmBgYA0KDQoNCg0KDQpgYGB7ciB3dF90b3BfMjVfaGVhdG1hcCwgZWNobz1GQUxTRX0NCg0KcGhlYXRtYXAodG9wXzI1X3ZzdF93dCwgZm9udHNpemUgPSA3LCBjb2xvciA9IGNvbG9ycywgY3V0cmVlX2NvbHMgID0gMikNCg0KYGBgDQoNCg0KDQpgYGB7ciB3dF81LCBpbmNsdWRlPUZBTFNFfQ0Kd3RfY291bnRfNSA9IGFzLmRhdGEuZnJhbWUoY291bnRzKGRkc193dCkpDQoNCnd0X2NvdW50XzUgPSByb3duYW1lc190b19jb2x1bW4od3RfY291bnRfNSwgdmFyID0gImVuc2dfaWQiKQ0KDQp3dF9jb3VudF81ID0gIHd0X2NvdW50XzVbd3RfY291bnRfNSRlbnNnX2lkICAlaW4lIGdlbmVzXzI1X3d0LCBdWzE6NSwgXQ0KDQp3dF9jb3VudF81ID0gbGVmdF9qb2luKHd0X2NvdW50XzUsIGFubm90YXRpb25fd3RbICwgYygnZW5zZW1ibF9nZW5lX2lkJywnZXh0ZXJuYWxfZ2VuZV9uYW1lJyldLCBieSA9IGMoImVuc2dfaWQiID0gImVuc2VtYmxfZ2VuZV9pZCIpKQ0KDQp3dF9jb3VudF81ID0gY29sdW1uX3RvX3Jvd25hbWVzKHd0X2NvdW50XzUsJ2V4dGVybmFsX2dlbmVfbmFtZScgKQ0KDQp3dF9jb3VudF81JGVuc2dfaWQgPSBOVUxMDQoNCg0Kd3RfYXNzYXlfNSA9IGFzLmRhdGEuZnJhbWUoYXNzYXkodnN0X3d0KSkNCg0Kd3RfYXNzYXlfNSA9IHJvd25hbWVzX3RvX2NvbHVtbih3dF9hc3NheV81LCB2YXIgPSAiZW5zZ19pZCIpDQoNCnd0X2Fzc2F5XzUgPSAgd3RfYXNzYXlfNVt3dF9hc3NheV81JGVuc2dfaWQgICVpbiUgZ2VuZXNfMjVfd3QsIF1bMTo1LCBdDQoNCnd0X2Fzc2F5XzUgPSBsZWZ0X2pvaW4od3RfYXNzYXlfNSwgYW5ub3RhdGlvbl93dFsgLCBjKCdlbnNlbWJsX2dlbmVfaWQnLCdleHRlcm5hbF9nZW5lX25hbWUnKV0sIGJ5ID0gYygiZW5zZ19pZCIgPSAiZW5zZW1ibF9nZW5lX2lkIikpDQoNCnd0X2Fzc2F5XzUgPSBjb2x1bW5fdG9fcm93bmFtZXMod3RfYXNzYXlfNSwnZXh0ZXJuYWxfZ2VuZV9uYW1lJyApDQoNCnd0X2Fzc2F5XzUkZW5zZ19pZCA9IE5VTEwNCmBgYA0KDQoNClRoZSBnZW5lIGNvdW50cyB3ZXJlIHRyYW5zZm9ybWVkIGJ5IHZhcmlhbmNlIHN0YWJpbGl6aW5nIHRyYW5zZm9ybWF0aW9uIHRvIG9idGFpbiBjb25zdGFudCB2YXJpYW5jZSB0aGF0IGlzIG5vdCBkZXBlbmRlbnQgb24gdGhlIG1lYW4uDQpUaGUgdGFibGVzIGJlbG93IHNob3dzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG9yaWdpbmFsIGFuZCB0aGUgdHJhbnNmb3JtZWQgZ2VuZSBjb3VudHMgaW4gdGhlIGZpcnN0IGZpdmUgZ2VuZXMgb2YgdGhlIGhlYXRtYXAuDQoNCk9yaWdpbmFsIGdlbmUgY291bnRzOg0KDQpgYGB7ciB0YWJsZV9jb3VudCwgZWNobz1GQUxTRX0NCmthYmxlKHd0X2NvdW50XzUpICU+JSBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygiYm9yZGVyZWQiLCAiaG92ZXIiKSwgZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiKQ0KYGBgDQoNClRyYW5zZm9ybWVkIGdlbmUgY291bnRzOg0KDQpgYGB7ciB0YWJsZV9hc3NheSwgZWNobz1GQUxTRX0NCmthYmxlKHd0X2Fzc2F5XzUpICU+JSBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygiYm9yZGVyZWQiLCAiaG92ZXIiKSwgZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiKQ0KYGBgDQoNCg0KYGBge3Igd3RfZ2VuZV9zZXRfZW5yaWNobWVudCwgaW5jbHVkZT1GQUxTRX0NCg0KZW50cmV6X2dlbmVfd3QgPSBhcy5jaGFyYWN0ZXIoYW5ub3RhdGVkX2Rkc193dF9maWx0ZXIzJGVudHJlemdlbmVfaWQpDQoNCmVudHJlel91bmlfd3QgPSBhcy5jaGFyYWN0ZXIoYW5ub3RhdGVkX2Rkc193dF9maWx0ZXIxJGVudHJlemdlbmVfaWQpDQoNCg0KZWdvX3d0ID0gZW5yaWNoR08oZ2VuZSA9IGVudHJlel9nZW5lX3d0LA0KICAgICAgICAgICAgICAgICAgT3JnRGIgPSBvcmcuSHMuZWcuZGIsDQogICAgICAgICAgICAgICAgICBvbnQgPSAiQlAiLA0KICAgICAgICAgICAgICAgICAgdW5pdmVyc2UgPSBlbnRyZXpfdW5pX3d0LA0KICAgICAgICAgICAgICAgICAgcmVhZGFibGUgPSBUUlVFKQ0KDQoNCmBgYA0KDQpUaGUgZm9sbG93aW5nIHBsb3Qgc2hvd3MgdGhlIHRvcCBiaW9sb2dpY2FsIHByb2Nlc3NlcyB0aGF0IGFyZSBlbnJpY2hlZCBpbiB0aGUgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzLg0KDQpgYGB7ciB3dF9kb3RwbG90X2VucmljaG1lbnQsIGVjaG89RkFMU0V9DQpkb3RwbG90KGVnb193dCkNCg0KYGBgDQoNCg0KDQpgYGB7ciB3dF9rZWdnLCBpbmNsdWRlPUZBTFNFfQ0Ka2VnZ19wYXRod2F5X3d0ID0gZW5yaWNoS0VHRyhnZW5lID0gZW50cmV6X2dlbmVfd3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNlID0gZW50cmV6X3VuaV93dCkNCg0Ka2VnZ193dF9kZiA9IGFzLmRhdGEuZnJhbWUoa2VnZ19wYXRod2F5X3d0KQ0KDQprZWdnX3d0X21haW4gPSBrZWdnX3d0X2RmWyAsIGMoIkRlc2NyaXB0aW9uIiwgIkdlbmVSYXRpbyIsICJwLmFkanVzdCIpXQ0KDQpyb3duYW1lcyhrZWdnX3d0X21haW4pID0gTlVMTA0KDQpgYGANCg0KDQpUaGUgZm9sbG93aW5nIHRhYmxlIHNob3dzIHRoZSBsaXN0IG9mIG92ZXItcmVwcmVzZW50YXRlZCBLRUdHIHBhdGh3YXlzIGluIHRoZSBkaWZmZXJlbnRpYWxseSBleHByZXNzZWQgZ2VuZXMuDQoNCmBgYHtyIGtlZ2dfdGFibGUsIGVjaG89RkFMU0V9DQprYWJsZShrZWdnX3d0X21haW4pICU+JSBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygiYm9yZGVyZWQiLCAiaG92ZXIiKSwgZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiKQ0KYGBgDQoNCg0KDQoNCg0KDQo=